/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.pb.sistcomp.controller;

import br.pb.sistcomp.dao.PessoaDaoImpl;
import br.pb.sistcomp.dao.ProdutoDaoImpl;
import br.pb.sistcomp.entity.Pessoa;
import br.pb.sistcomp.entity.Produto;
import br.pb.sistcomp.exception.ErroAoRemoverException;
import br.pb.sistcomp.exception.ErroAoSalvarException;
import br.pb.sistcomp.util.MessagesUtil;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import  org.richfaces.event.FileUploadEvent;
import  org.richfaces.model.UploadedFile;

/**
 * Class that represents an entity in the system
 * @author fagner , fagner.silva@sistcomp.com.br
 * @version 1.0
 * Copyright (C) 2011 SistComp.
 */
@ManagedBean
@SessionScoped
public class ProdutoController implements Serializable{
    private Produto produto;
    private Pessoa pessoa;
    private PessoaDaoImpl pessoaDao;
    private List<Produto> produtos;
    private ProdutoDaoImpl produtoDao;
    private DataModel modelProduto ;
    private ArrayList <UploadedImage> files = new ArrayList <UploadedImage> ();  
    
    /**
     * ProdutoController clasthrow new UnsupportedOperationException("Not yet implemented");s constructor;
     */
    public ProdutoController() {   
          produto = new Produto();
          produtoDao = new ProdutoDaoImpl();
          produtos = new ArrayList<Produto>();          
    }    
    /**
     * Method that removes a product;
     */
    public String remover() throws ErroAoRemoverException{   
          
        try{
            
            produtoDao.removerProduto(produto);   
            MessagesUtil.addInfoMsg("Produto Excluído com Sucesso!");


        } catch (ErroAoRemoverException ex) {

            MessagesUtil.addErroMsg("Erro ao excluir Produto!");

        }
        return "gotoRemoverTodosProdutos";           
    }
    /**
     * Method to insert a product;
     */    
    public void inserir() throws ErroAoSalvarException{
        
        try{
            PessoaDaoImpl pdi = new PessoaDaoImpl();
            Pessoa p = pdi.procurarPessoa(1);
            produto.setUsuario(p);
            produto.setImage(files);
            //produto.setImagem(fue.getUploadedFile().getData());            
            produtoDao.cadastrarProduto(produto);     
            MessagesUtil.addInfoMsg("Produto cadastrado com sucesso!");            
        
        }catch (ErroAoSalvarException ex) {
            MessagesUtil.addErroMsg("Erro ao cadastrar Produto. Por favor, tente outra vez ou contate o administrador do sistema");
            ex.printStackTrace();
        } 
        finally{
            produto = new Produto();
        }
        
    }
    /**
     * Method that lists all products;
     */    
    public List<Produto> listarTodosProdutos(){          
        
            produtos = produtoDao.listarTodos();     
        
        return produtos;        
    }  
    public void procurarCpfPessoa(){        
        
        for(Pessoa p : pessoaDao.listarTodos()){        
            if(p.getCpf().equals(pessoa.getCpf()))
                produto.setUsuario(p);        
        }
        
    }
    
    public DataModel carregarProduto(){
                 modelProduto =new ListDataModel(produtoDao.listarTodos());
             return  modelProduto;


    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }
        
    
    public Produto getProduto() {
        return produto;
    }
    public void setProduto(Produto produto) {
        this.produto = produto;
    }   
    
    
    
    
    public void listener(FileUploadEvent event) throws Exception {
        UploadedFile item = event.getUploadedFile();
        UploadedImage file = new UploadedImage();
        file.setLength(item.getData().length);
        file.setName(item.getName());
        file.setData(item.getData());
        files.add(file);
    }
    
    public String clearUploadData() {
        files.clear();
        return null;
    }
    
    public int getSize() {
        if (getFiles().size() > 0) {
            return getFiles().size();
        } else {
            return 0;
        }
    }
    
    public long getTimeStamp() {
        return System.currentTimeMillis();
    }
 
    public ArrayList<UploadedImage> getFiles() {
        return files;
    }
 
    public void setFiles(ArrayList<UploadedImage> files) {
        this.files = files;
    }
    public void paint(OutputStream stream, Object object) throws IOException {
        stream.write(getFiles().get((Integer) object).getData());
        stream.close();
    }
}

